#pragma once
#include <cstdio>

// 日志功能接口宏
// Debug日志宏
#define LOG_DEBUG(...) \
    logger::Log(__FILE__, __LINE__, logger::Severity::DEBUG, __VA_ARGS__)

// Info日志宏
#define LOG_INFO(...) \
    logger::Log(__FILE__, __LINE__, logger::Severity::INFO, __VA_ARGS__)

// Warning日志宏
#define LOG_WARN(...) \
    logger::Log(__FILE__, __LINE__, logger::Severity::WARN, __VA_ARGS__)

// Error日志宏
#define LOG_ERROR(...) \
    logger::Log(__FILE__, __LINE__, logger::Severity::ERROR, __VA_ARGS__)

// Panic日志宏
#define LOG_PANIC(...) \
    logger::Log(__FILE__, __LINE__, logger::Severity::PANIC, __VA_ARGS__)

    
namespace logger {
enum class Severity {
    NONE    = -2,           // 所有级别都不打印
    ALL     = -1,           // 所有级别都打印
    PANIC   = 0,            
    ERROR,
    WARN,
    INFO,
    DEBUG,
    COUNT                   // 代表有多少个级别
};
extern void Log(const char* file, int line, Severity severity, const char* txt, ...);

// 重定向日志到文件
void Redirect(std::FILE* file, Severity severity = Severity::ALL);

// 设置日志级别
void SetSeverity(Severity severity);
}